const crypto = require('crypto');
const fs = require('fs');
const path = require('path');

// 存储激活码的JSON文件
const LICENSE_FILE = path.join(__dirname, 'licenses.json');

// 生成激活码
function generateLicenseKey() {
    const uuid = crypto.randomUUID();
    // 格式化为 XXXX-XXXX-XXXX-XXXX
    return uuid.replace(/-/g, '').match(/.{1,4}/g).join('-').toUpperCase();
}

// 读取现有许可证
function readLicenses() {
    try {
        if (fs.existsSync(LICENSE_FILE)) {
            const data = fs.readFileSync(LICENSE_FILE, 'utf8');
            return JSON.parse(data);
        }
    } catch (error) {
        console.error('读取许可证文件失败:', error);
    }
    return [];
}

// 保存许可证
function saveLicenses(licenses) {
    try {
        fs.writeFileSync(LICENSE_FILE, JSON.stringify(licenses, null, 2));
        return true;
    } catch (error) {
        console.error('保存许可证文件失败:', error);
        return false;
    }
}

// 生成指定有效期的激活码
function generateLicense(minutes = 5) {
    const license_key = generateLicenseKey();
    const now = new Date();
    const expire_date = new Date(now.getTime() + minutes * 60 * 1000);
    
    const license = {
        license_key,
        created_date: now.toISOString(),
        expire_date: expire_date.toISOString(),
        features: ['mass_send', 'schedule_send'],
        max_contacts: 1000,
        machine_id: null, // 首次使用时绑定
        status: 'active'
    };
    
    return license;
}

// 主函数
function main() {
    // 获取命令行参数
    const args = process.argv.slice(2);
    let minutes = 5; // 默认5分钟
    
    if (args.length > 0) {
        const inputMinutes = parseInt(args[0]);
        if (!isNaN(inputMinutes) && inputMinutes > 0) {
            minutes = inputMinutes;
        }
    }
    
    // 生成激活码
    const license = generateLicense(minutes);
    
    // 读取现有许可证
    const licenses = readLicenses();
    
    // 添加新许可证
    licenses.push(license);
    
    // 保存到文件
    if (saveLicenses(licenses)) {
        console.log('✅ 激活码生成成功！');
        console.log('=' * 50);
        console.log(`激活码: ${license.license_key}`);
        console.log(`有效期: ${minutes} 分钟`);
        console.log(`过期时间: ${new Date(license.expire_date).toLocaleString('zh-CN')}`);
        console.log('=' * 50);
        console.log('\n使用方法:');
        console.log('1. 启动服务器: npm start');
        console.log('2. 打开软件并输入激活码');
        console.log('3. 在有效期内正常使用软件');
    } else {
        console.error('❌ 激活码生成失败！');
    }
}

// 如果直接运行此脚本
if (require.main === module) {
    main();
}

module.exports = {
    generateLicenseKey,
    generateLicense
}; 